package cn.com.easy.permission.service.system.role;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.com.easy.permission.dao.RoleDao;
import cn.com.easy.permission.dao.RoleResourceMappingDao;
import cn.com.easy.permission.dao.UserRolesMappingDao;
import cn.com.easy.permission.model.RoleResourceMappingModel;
import cn.com.easy.permission.model.UserRolesMappingModel;

/**
 * 角色管理服务类
 * 
 * @author nibili 2015年12月10日下午11:31:19
 * 
 */
@Service
public class SystemRoleService {
	/** 角色资源对应表 */
	@Autowired
	private RoleResourceMappingDao roleResourceMappingDao;
	/** 角色用户对应表dao */
	@Autowired
	private UserRolesMappingDao userRolesMappingDao;
	/** 角色dao */
	@Autowired
	private RoleDao roleDao;

	@Transactional
	public UserRolesMappingModel getById(Long id) {
		return userRolesMappingDao.findOne(id);
	}

	/**
	 * 保存更新角色权限
	 * 
	 * @param roleId
	 * @param resourceIdsString
	 * @auth nibili 2015年12月10日 下午11:31:59
	 */
	@Transactional
	public void saveRoleResources(Long roleId, String resourceIdsString) {
		// 先删除现有的权限
		roleResourceMappingDao.deleteByRoleId(roleId);
		// 资源权限id数组
		String[] resourceIds = StringUtils.split(resourceIdsString, ",");
		RoleResourceMappingModel mappingModel;
		for (String resourceId : resourceIds) {
			mappingModel = new RoleResourceMappingModel();
			mappingModel.setResourceId(Long.valueOf(resourceId));
			mappingModel.setRoleId(roleId);
			roleResourceMappingDao.save(mappingModel);
		}
	}

	/**
	 * 删除角色成员
	 * 
	 * @param roleId
	 * @param memberIdsString
	 * @author nibili 2015年12月11日
	 */
	@Transactional
	public void deleteMember(Long roleId, Long memberId) {
		userRolesMappingDao.deleteByRoleIdAndUserId(roleId, memberId);
	}

	/**
	 * 按角色id删除角色
	 * 
	 * @param roleId
	 * @author nibili 2015年12月24日
	 */
	@Transactional
	public void deleteRoleById(Long roleId) {
		// 删除现有的权限
		roleResourceMappingDao.deleteByRoleId(roleId);
		// 删除成员
		userRolesMappingDao.deleteByRoleId(roleId);
		// 删除角色
		roleDao.delete(roleId);
	}
}
